Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

core/database/src/commonTest/kotlin/org/meshtastic/core/database/dao/MeshLogDaoTest.kt d5848ad5e02bd9b5b1726bedfa51ceb0faaa0240 (d5848ad5) Text, 7.41 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.database.dao

Tff7b72import T7ee787androidx.room3.executeSQL
Tff7b72import T7ee787androidx.room3.useWriterConnection
Tff7b72import T7ee787kotlinx.coroutines.flow.first
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787org.meshtastic.core.database.DatabaseConstants.SQLITE_MAX_BIND_PARAMETERS
Tff7b72import T7ee787org.meshtastic.core.database.MeshtasticDatabase
Tff7b72import T7ee787org.meshtastic.core.database.entity.MeshLog
Tff7b72import T7ee787org.meshtastic.core.database.getInMemoryDatabaseBuilder
Tff7b72import T7ee787org.meshtastic.proto.PortNum
Tff7b72import T7ee787kotlin.test.AfterTest
Tff7b72import T7ee787kotlin.test.BeforeTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertFails
Tff7b72import T7ee787kotlin.test.assertTrue

Tff7b72class T56d364MeshLogDaoTest Tb4b4b4{
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3databaseTb4b4b4: Te6edf3MeshtasticDatabase
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3meshLogDaoTb4b4b4: Te6edf3MeshLogDao

Tff7b72private Tff7b72val Te6edf3testFromNum Tff7b72= T79c0ff4T79c0ff2

Tff7b72private Tff7b72fun Td2a8fflogEntryTb4b4b4(Te6edf3uuidTb4b4b4: Tffa657StringTb4b4b4, Te6edf3portNumTb4b4b4: Tffa657Int Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3timeTb4b4b4: Tffa657LongTb4b4b4) Tff7b72= Te6edf3MeshLogTb4b4b4(
Te6edf3uuid Tff7b72= Te6edf3uuidTb4b4b4,
Te6edf3message_type Tff7b72= Ta5d6ff"Ta5d6ffPacketTa5d6ff"Tb4b4b4,
Te6edf3received_date Tff7b72= Te6edf3timeTb4b4b4,
Te6edf3raw_message Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3fromNum Tff7b72= Te6edf3testFromNumTb4b4b4,
Te6edf3portNum Tff7b72= Te6edf3portNumTb4b4b4,
Tb4b4b4)

T8b949e/** Places [first] in a full bind-param chunk and [second] in the next chunk without inserting filler rows. */
Tff7b72private Tff7b72fun Td2a8ffcrossChunkUuidsTb4b4b4(Te6edf3firstTb4b4b4: Tffa657StringTb4b4b4, Te6edf3secondTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tff7b72= Te6edf3buildList Tb4b4b4{
Te6edf3addTb4b4b4(Te6edf3firstTb4b4b4)
Te6edf3repeatTb4b4b4(Te6edf3SQLITE_MAX_BIND_PARAMETERS Tff7b72- T79c0ff1Tb4b4b4) Tb4b4b4{ Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffmissing-Tffd700$Te6edf3itTa5d6ff"Tb4b4b4) Tb4b4b4}
Te6edf3addTb4b4b4(Te6edf3secondTb4b4b4)
Tb4b4b4}

Tf0883e@BeforeTest
Tff7b72fun Td2a8ffsetUpTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3database Tff7b72= Te6edf3getInMemoryDatabaseBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3meshLogDao Tff7b72= Te6edf3databaseTb4b4b4.Te6edf3meshLogDaoTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tf0883e@AfterTest
Tff7b72fun Td2a8ffcloseDbTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3databaseTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestDeleteLogsByUuidAtomicRemovesAllTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-1Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-2Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-3Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff3T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3uuids Tff7b72=
Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uuid Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3uuidsTb4b4b4.Te6edf3sizeTb4b4b4)

Te6edf3meshLogDaoTb4b4b4.Te6edf3deleteLogsByUuidAtomicTb4b4b4(Te6edf3uuidsTb4b4b4)

Tff7b72val Te6edf3remaining Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3remainingTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestDeleteLogsByUuidAtomicEmptyListIsNoOpTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-1Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-2Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3before Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3beforeTb4b4b4.Te6edf3sizeTb4b4b4)

Te6edf3meshLogDaoTb4b4b4.Te6edf3deleteLogsByUuidAtomicTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3after Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3afterTb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestDeleteLogsByUuidAtomicCrossesChunkBoundaryTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3firstUuid Tff7b72= Ta5d6ff"Ta5d6fffirst-chunkTa5d6ff"
Tff7b72val Te6edf3secondUuid Tff7b72= Ta5d6ff"Ta5d6ffsecond-chunkTa5d6ff"
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Te6edf3firstUuidTb4b4b4, Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Te6edf3secondUuidTb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
T8b949e// Insert one log from a different fromNum that should survive the delete.
Tff7b72val Te6edf3survivor Tff7b72=
Te6edf3MeshLogTb4b4b4(
Te6edf3uuid Tff7b72= Ta5d6ff"Ta5d6ffsurvivorTa5d6ff"Tb4b4b4,
Te6edf3message_type Tff7b72= Ta5d6ff"Ta5d6ffPacketTa5d6ff"Tb4b4b4,
Te6edf3received_date Tff7b72= T79c0ff0LTb4b4b4,
Te6edf3raw_message Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3fromNum Tff7b72= T79c0ff9T79c0ff9T79c0ff9Tb4b4b4,
Te6edf3portNum Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4,
Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3survivorTb4b4b4)

Te6edf3meshLogDaoTb4b4b4.Te6edf3deleteLogsByUuidAtomicTb4b4b4(Te6edf3crossChunkUuidsTb4b4b4(Te6edf3firstUuidTb4b4b4, Te6edf3secondUuidTb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3remaining Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3remainingTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffall selected logs should be deleted across the chunk boundaryTa5d6ff"Tb4b4b4)

Tff7b72val Te6edf3survivorStillPresent Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(T79c0ff9T79c0ff9T79c0ff9Tb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3survivorStillPresentTb4b4b4.Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffunselected log from a different fromNum should remainTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestDeleteLogsByUuidAtomicRollsBackEarlierChunkWhenLaterChunkFailsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3firstUuid Tff7b72= Ta5d6ff"Ta5d6fffirst-chunkTa5d6ff"
Tff7b72val Te6edf3secondUuid Tff7b72= Ta5d6ff"Ta5d6fffailing-second-chunkTa5d6ff"
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Te6edf3firstUuidTb4b4b4, Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Te6edf3secondUuidTb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3databaseTb4b4b4.Te6edf3useWriterConnection Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3executeSQLTb4b4b4(
Ta5d6ff"""
Ta5d6ff CREATE TRIGGER fail_second_log_delete_chunk
BEFORE DELETE ON log
WHEN OLD.uuid = 'Tffd700$Te6edf3secondUuidTa5d6ff'
BEGIN
SELECT RAISE(ABORT, 'forced later-chunk delete failure');
END
Ta5d6ff"""
Tb4b4b4.Te6edf3trimIndentTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3assertFails Tb4b4b4{ Te6edf3meshLogDaoTb4b4b4.Te6edf3deleteLogsByUuidAtomicTb4b4b4(Te6edf3crossChunkUuidsTb4b4b4(Te6edf3firstUuidTb4b4b4, Te6edf3secondUuidTb4b4b4)Tb4b4b4) Tb4b4b4}

Tff7b72val Te6edf3remaining Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsFromTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3setOfTb4b4b4(Te6edf3firstUuidTb4b4b4, Te6edf3secondUuidTb4b4b4)Tb4b4b4, Te6edf3remainingTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uuid Tb4b4b4}Tb4b4b4.Te6edf3toSetTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestGetLogsSnapshotPageTraversesEqualTimestampsWithoutDuplicatesTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-aTa5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff3T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-cTa5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-bTa5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-a2Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3first Tff7b72=
Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsSnapshotPageTb4b4b4(
Te6edf3testFromNumTb4b4b4,
Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4,
Te6edf3beforeReceivedDate Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3beforeUuid Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3pageSize Tff7b72= T79c0ff2Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3cursor Tff7b72= Te6edf3firstTb4b4b4.Te6edf3lastTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3second Tff7b72=
Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsSnapshotPageTb4b4b4(
Te6edf3testFromNumTb4b4b4,
Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4,
Te6edf3beforeReceivedDate Tff7b72= Te6edf3cursorTb4b4b4.Te6edf3received_dateTb4b4b4,
Te6edf3beforeUuid Tff7b72= Te6edf3cursorTb4b4b4.Te6edf3uuidTb4b4b4,
Te6edf3pageSize Tff7b72= T79c0ff2Tb4b4b4,
Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6fflog-aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflog-cTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflog-bTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflog-a2Ta5d6ff"Tb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3first Tff7b72+ Te6edf3secondTb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uuid Tb4b4b4}Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fftestGetLogsSnapshotReturnsMatchingLogsTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-1Ta5d6ff"Tb4b4b4, Te6edf3portNum Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3time Tff7b72= T79c0ff3T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-2Ta5d6ff"Tb4b4b4, Te6edf3portNum Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3time Tff7b72= T79c0ff1T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3meshLogDaoTb4b4b4.Te6edf3insertTb4b4b4(Te6edf3logEntryTb4b4b4(Ta5d6ff"Ta5d6fflog-3Ta5d6ff"Tb4b4b4, Te6edf3portNum Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3POSITION_APPTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3time Tff7b72= T79c0ff2T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4)

Tff7b72val Te6edf3snapshot Tff7b72= Te6edf3meshLogDaoTb4b4b4.Te6edf3getLogsSnapshotTb4b4b4(Te6edf3testFromNumTb4b4b4, Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APPTb4b4b4.Te6edf3valueTb4b4b4, Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3snapshotTb4b4b4.Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffonly telemetry logs should matchTa5d6ff"Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6fflog-1Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflog-2Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3snapshotTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uuid Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6fftelemetry logs in DESC orderTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.07s